package devcamp.team.connection;

import java.io.IOException;
import java.util.List;
import java.util.Locale;

import android.app.Activity;
import android.app.ProgressDialog;
import android.content.Intent;
import android.location.Address;
import android.location.Geocoder;
import android.os.AsyncTask;
import android.util.Log;
import android.widget.LinearLayout;
import devcamp.team.R;
import devcamp.team.util.DialogUtils;
import devcamp.team.util.WowoooooooUtils;

/**
 * Wowoooooooと叫ぶ通信を行うクラス.
 * @author kkato,moonstruckdrops
 *
 */
public class WowoooooooAsyncTask extends AsyncTask<Void, Void, Boolean> {
    /**
     * ログ出力用のタグ.
     */
    private static final String TAG = "WowoooooooAsyncTask";
    /**
     * アクティビティ.
     */
    private Activity mActivity;
    /**
     * ユニークID.
     */
    private long mUniqueId;
    private float mLatitude;
    private float mLongitude;
    private String mLocation;
    /**
     * プログレスダイアログ.
     */
    private ProgressDialog progressDialog;

    /**
     * コンストラクタ.
     * @param activity アクティビティ
     * @param id ユニークID
     * @param latitude 緯度
     * @param longitude 経度
     * @param location 場所
     */
    public WowoooooooAsyncTask(Activity activity, long id, float latitude, float longitude, String location) {
        mActivity = activity;
        mUniqueId = id;
        mLatitude = latitude;
        mLongitude = longitude;
        mLocation = location;
        progressDialog = DialogUtils.SpinnerProgressDialog(activity, mActivity.getResources().getString(R.string.dialog_registration_titile), mActivity.getResources().getString(R.string.dialog_registration_message));
    }

    @Override
    protected void onPreExecute() {
        //プログレスダイアログを表示する
        progressDialog.show();
    }

    @Override
    protected Boolean doInBackground(Void... params) {
    	// 地名（住所）の取得
    	
    	/* IOException になってダメ
    	StringBuffer buff = new StringBuffer();
    	try {
    		Geocoder geocoder = new Geocoder(mActivity.getBaseContext(), Locale.getDefault());
        	
        	// java.io.IOException: Service not Available(エミュレータ)
        	// java.io.IOException: Unable to parse response from server（実機でも）
			List<Address> address = geocoder.getFromLocation((double) mLatitude, (double) mLongitude, 1);
			
			for (Address addr : address) {
				int max = addr.getMaxAddressLineIndex();
				for (int i = 0; i <= max; i++) {
					buff.append(addr.getAddressLine(i));
				}
			}
			
		} catch (IOException e) {
			e.printStackTrace();
		}
    	Log.d("WowoooooooAsyncTask", buff.toString());
    	mLocation = buff.toString();
    	*/
    	
    	// Google Geocoding API V3　使用してみる　：　地名（住所）の取得
    	mLocation = ServerConnectionModel.getLocationName(mLatitude, mLongitude);
    	Log.d("WowoooooooAsyncTask", "locationName : " + mLocation);
    	   	
        boolean result = ServerConnectionModel.wowooooooo(mUniqueId, mLatitude, mLongitude, mLocation);
        return result;
    }

    @Override
    protected void onPostExecute(Boolean param) {
        Log.d(TAG, "ServerConnectionModel.wowooooooo : " + param);
        //プログレスダイアログを閉じる
        progressDialog.dismiss();
        if (param) {
            Intent intent = new Intent();
            intent.setClassName("devcamp.team", "devcamp.team.WowListActivity");
            intent.putExtra(WowoooooooUtils.LATITUDE, mLatitude);
            intent.putExtra(WowoooooooUtils.LONGITUDE, mLongitude);
            mActivity.startActivity(intent);
            
            // 成功時のみ削除に変更
            LinearLayout l = (LinearLayout) mActivity.findViewById(R.id.topmap);

            l.removeAllViews();
        } else {
            // TODO:登録のエラーなのでダイアログを表示する処理を実行
            DialogUtils.AlertDialog(mActivity, mActivity.getResources().getString(R.string.dialog_error_registration_titile), mActivity.getResources().getString(R.string.dialog_error_registration_error)).show();
        }
    }
}
